#pragma once

#include <vector>
#include <utility>

#include "Globals.h"
#include "GameObject.h"
//#include "SceneManager.h"
//#include "CppEvent.h"
//#include "Tile.h"
//#include "Scene.h"

namespace game_engine
{

// Forward declaration
class Scene;

/*!
 * \class CollisionArbiter
 * \brief 
 */
class CollisionArbiter
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
//private:
//    utils::CppEventHandler h2;
//    utils::CppEvent2<BOOL,GameObject*,tile_engine::TileType> worldCollision;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and destructors
    CollisionArbiter(void);
    virtual ~CollisionArbiter(void);

    // Others
    //void initialize(SceneManager *manager);
    //void update(const Scene *scene) throw(...);
    //void finalize(void);

    const vector<GameObject*> evaluateWorldCollisions(const Scene *scene, 
        const vector<GameObject*> &objects) throw(...);
    const vector<pair<GameObject*, GameObject*>> evaluateInterCollisions(const 
        vector<GameObject*> &objects) throw(...);

private:
    //void evaluateWorldCollisions(const Scene *scene, 
    //    const vector<GameObject*> &objects) throw(...);
    //void evaluateInterCollisions(const vector<GameObject*> &objects) throw(...);

};

}

